package com.xmut.mall.search.controller;

import com.xmut.mall.search.es.document.product.Attrs;
import com.xmut.mall.search.es.document.product.ProductESPojo;
import com.xmut.mall.search.searchparam.ProductSearchParam;
import com.xmut.mall.search.service.ProductService;
import com.xmut.mall.search.to.AttrEntityTo;
import com.xmut.mall.search.to.BrandEntityTo;
import com.xmut.mall.search.utils.RespBean;
import com.xmut.mall.search.vo.ProductVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/search/EsSearch")
public class EsSearchController {

    @Autowired
    private  ProductService productService;

    /**
     * 根据cateId搜索ES商品
     * @param param
     * @return
     */
    @PostMapping("/getProductPageByCateId")
    public RespBean getProductPageByCateId(@RequestBody ProductSearchParam param){
        return productService.getProductPageByCateId(param);
    }

    /**
     * 根据搜索的keyword获取商品的分页参数
     * @param param
     * @return
     */
    @PostMapping("/getProductPageByKeyWord")
    public RespBean getProductPageByKeyWord(@RequestBody ProductSearchParam param){
        return productService.getProductPageByKeyWord(param);
    }

    /**
     * 获取所有商品
     * @return
     */
    @GetMapping("/getAllProduct")
    public RespBean getAllProduct(){
        List<ProductESPojo> list = productService.getAllProduct();
        return RespBean.success("获取所有商品成功",list);
    }

    /**
     * 根据分类Id获取商品
     * @param cateId
     * @return
     */
    @GetMapping("/getProductByCateId/{cateId}")
    public RespBean getProductByCateId(@PathVariable Long cateId){
        List<ProductESPojo> products = productService.getProductByCateId(cateId);
        if(products.isEmpty()){
            return RespBean.error("获取商品失败");
        }else {
            return RespBean.success("获取商品成功",products);
        }
    }

    /**
     * 根据搜索框输入的KeyWord获取商品的可检索attr属性
     * @param keyword
     * @return
     */
    @GetMapping("/getProductAttrByKeyWord/{keyword}")
    public RespBean getProductAttrByKeyWord(@PathVariable String keyword){
        List<AttrEntityTo> attrsList = productService.getProductAttrByKeyWord(keyword);
        return RespBean.success("获取attr成功",attrsList);
    }

    /**
     * 根据输入框输入的KeyWord获取商品列表
     * @param keyword
     * @return
     */
    @GetMapping("/getProductByKeyWord/{keyword}")
    public RespBean getProductByKeyWord(@PathVariable String keyword){
        List<ProductESPojo> productList = productService.getProductByKeyWord(keyword);
        return RespBean.success("获取商品列表成功",productList);
    }

    /**
     * 使用keyword获取可进行检索的品牌信息
     * @param keyword
     * @return
     */
    @GetMapping("/getProductBrandByKeyWord/{keyword}")
    public RespBean getProductBrandByKeyWord(@PathVariable String keyword){
        List<BrandEntityTo> brandToList = productService.getProductBrandByKeyWord(keyword);
        return RespBean.success("获取品牌成功",brandToList);
    }

    /**
     * 根据skuId获取商品的所属品牌
     * @param skuId
     * @return
     */
    @GetMapping("/getProductBrandNameBySkuId/{skuId}")
    public RespBean getProductBrandNameBySkuId(@PathVariable Long skuId){
        String brandName = productService.getProductBrandNameBySkuId(skuId);
        return RespBean.success("获取品牌名称成功",brandName);
    }

    /**
     * 根据skuId获取商品信息
     * @param skuId
     * @return
     */
    @GetMapping("/getProductBySkuId/{skuId}")
    public RespBean getProductBySkuId(@PathVariable Long skuId){
        ProductESPojo product = productService.getProductBySkuId(skuId);
        return RespBean.success("获取商品成功",product);
    }

    /**
     * 根据skuId获取商品详细信息
     * @param skuId
     * @return
     */
    @GetMapping("/getProductDetailVoBySkuId/{skuId}")
    public RespBean getProductDetailVoBySkuId(@PathVariable Long skuId){
        ProductVo productVo = productService.getProductDetailVoBySkuId(skuId);
        return RespBean.success("获取商品详细信息成功",productVo);
    }
}
